﻿using System.Data;
using System.Web.Security;
using System.Linq;
using System.Web.Mvc;
using EventPlanner.Models;
using EventPlanner.DAL;
using EventPlanner.Performance;

namespace EventPlanner.Controllers
{
    [CompressFilter(Order = 1)]
    [CacheFilter(Duration = 60, Order=2)]
    public class ContactoController : Controller
    {
        private EventPlannerContext db = new EventPlannerContext();

        //
        // GET: /Contacto/

        /* Lista: consulta la base de datos y muestra una tabla con todos los contactos de la cuenta*/

        [Authorize]
        public ViewResult Lista()
        {
            MembershipUser UsuarioActual = Membership.GetUser();
            Cuenta cuenta = db.Cuentas.Find(UsuarioActual.UserName);
            return View(cuenta.Contactos.ToList());
        }

        //
        // GET: /Contacto/Crear

        /* Crear: crea un contacto nuevo en la cuenta correspondiente*/

        [Authorize]
        public ActionResult Crear()
        {
            return View();
        } 

        //
        // POST: /Contacto/Crear


        [HttpPost]
        public ActionResult Crear(Contacto contacto)
        {
            if (ModelState.IsValid)
            {
                MembershipUser UsuarioActual = Membership.GetUser();
                Cuenta cuenta = db.Cuentas.Find(UsuarioActual.UserName);
                cuenta.Contactos.Add(contacto);
                db.SaveChanges();
                return RedirectToAction("Lista");  
            }

            return View(contacto);
        }
        
        //
        // GET: /Contacto/Editar/5

        /* Editar: modifica los datos de un contacto en particular*/

        [Authorize]
        public ActionResult Editar(string id)
        {
            MembershipUser UsuarioActual = Membership.GetUser();
            Cuenta cuenta = db.Cuentas.Find(UsuarioActual.UserName);
            Contacto contacto = db.Contactos.Find(id);
            if (cuenta.Contactos.Contains(contacto))
            {
                return View(contacto);
            }
            else
            {
                return RedirectToAction("Mensaje_Acceso_denegado", "Autorizacion", new { msj = "Contacto/Editar/" + id });
            }
        }

        //
        // POST: /Contacto/Editar/5

        [HttpPost]
        public ActionResult Editar(Contacto contacto)
        {
            if (ModelState.IsValid)
            {
                db.Entry(contacto).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Lista");
            }
            return View(contacto);
        }

        //
        // GET: /Contacto/Eliminar/5

        /* Eliminar: elimina un contacto de la base de datos*/

        [Authorize]
        public ActionResult Eliminar(string id)
        {
            MembershipUser UsuarioActual = Membership.GetUser();
            Cuenta cuenta = db.Cuentas.Find(UsuarioActual.UserName);
            Contacto contacto = db.Contactos.Find(id);
            if (cuenta.Contactos.Contains(contacto))
            {
                return View(contacto);
            }
            else
            {
                return RedirectToAction("Mensaje_Acceso_denegado", "Autorizacion", new { msj = "Contacto/Eliminar/" + id });
            }
        }

        //
        // POST: /Contacto/Eliminar/5

        [HttpPost, ActionName("Eliminar")]
        public ActionResult EliminacionConfirmada(string id)
        {            
            Contacto contacto = db.Contactos.Find(id);
            db.Contactos.Remove(contacto);
            db.SaveChanges();
            return RedirectToAction("Lista");
        }

        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }
    }
}